#ifndef __QC_H__
#define __QC_H__
// https://blog.csdn.net/monkey_d_xue/article/details/129648249

// QC检测时间周期
#define QC_DETECT_PERIOD_MS 2000

// QC检测DP DN短路时间
#define QC_DETECT_TIMEPOINT 200

// QC检测循环的工作时间,该值请尽量准确，否则可能出线诱骗失败
#define QC_LOOP_CALL_DURATION_MS 10

//最多有几个QC缓存
#define QC_MAX_CONTEXT 3
typedef enum
{
    QC_5V,
    QC_9V,
    QC_12V,
    QC_20V,
} QCVoltEnum;

typedef enum
{
    QC_BUSY,
    QC_SUPPORT,
    QC_NOT_SUPPORT,
} QCSupportRetEnum;

typedef enum
{
    QC_SET_FLOAT,
    QC_SET_0V,
    QC_SET_600mv,
    QC_SET_3300mv,
} QCSetEnum;

typedef struct
{
    void (*setDP)(QCSetEnum);
    void (*setDN)(QCSetEnum);
    unsigned int (*getDPVoltmv)(void); // 获得电压值，单位为mv
    unsigned int (*getDNVoltmv)(void); // 获得电压值，单位为mv
} QCInitParms;


typedef void * QCHandler;

QCHandler *QCInit(QCInitParms *parms,QCVoltEnum volt);
QCSupportRetEnum isSupportQCProtocol(QCHandler *handler);
//请以QC_LOOP_CALL_DURATION_MS的时间间隔进行调用
void QCLoop(QCHandler *handler);
#endif
